<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Reserva extends CI_Controller {
    
    public function __construct(){
        parent::__construct();
        if (!$this->session->userdata('logged_in')) {
            redirect('login');exit;
        }
        else{
            $componente = array('componente'=>'reserva');
            $this->session->set_userdata($componente);
            $this->load->model('Reserva_Model');
            $this->load->model('Pagamento_Model');
            $this->load->library('form_validation');
            $this->load->helper('date');
        }
    }
    public function index(){
        if(!$this->session->userdata('componente')){
            echo "Componente indefinido!";
        }else{
            $componente = $this->session->userdata('componente').'_view';    
            $this->load->view('layout/header_view',$componente);
            $this->load->view('menu_view');
            $this->gerencia();
            $this->load->view('layout/footer_view');
        }
    }
    public function form(){
        $token = md5(uniqid(rand(), true));
        $reserva = array(
            'usuario_idusuario'=>$this->session->userdata('idusuario'),
            'status_idstatus'=>'2',
            'title'=>$this->input->post('title'),
            'dtinicial'=>date('Y-m-d', strtotime(str_replace('/', '-', $this->input->post('dtclicada')))),
            'dtfinal'=>date('Y-m-d', strtotime(str_replace('/', '-', $this->input->post('dtfinal')))),
            'descricao_reserva'=>$this->input->post('descricao'),
            'token'=>$token,
            'dtagendamento'=>date("Y-m-d", strtotime("now"))
        );
        if($this->input->post('add')){
            $config = array(
                array(
                'field' => 'descricao',
                'label' => 'Descrição da Reserva',
                'rules' => 'trim|required|xss_clean')
            );
        }
        $this->form_validation->set_rules($config);
        if ($this->form_validation->run($this) != FALSE){            
            $dtfinal = $this->input->post('dtfinal');
            if(!$dtfinal){ 
               $dtfinal = date('d/m/Y',strtotime($this->input->post('dtclicada')));
            }
            if(!$this->Reserva_Model->verificaDataReserva($dtfinal)){   
                $dtfinal =  date('Y-m-d', strtotime(str_replace('/', '-', $this->input->post('dtfinal'))));
                $dtinicial = date('Y-m-d',strtotime($this->input->post('dtclicada')));                 
                if($dtfinal < $dtinicial){
                    $dtfinal = $dtinicial;
                }
                $qtDias = date('Y-m-d',strtotime($dtinicial . "+1 days"));                
                if($dtfinal < $qtDias){ 
                    $agendamentos = $this->Reserva_Model->agendamentos($dtfinal);
                    if(!$agendamentos){ 
                        if(!$periodos = $this->Reserva_Model->periodos($dtinicial,$dtfinal)){
                            $agendamento = date('Y-m-d', strtotime($dtinicial));
                            $idusuario   = $this->session->userdata('idusuario');
                            $agendamentoCliente = $this->Reserva_Model->agendamentoCliente($idusuario, $agendamento);
                            if($agendamentoCliente != true){
                                $aptidaoCliente = $this->Reserva_Model->aptidaoCliente($idusuario);
                                if(!empty($aptidaoCliente)){
                                    exit("Não foi possível realizar o agendamento. Favor entrar em contato através do telefone: (71) 3368-8342");
                                }else{
                                    $idReserva = $this->Reserva_Model->insere($reserva);
                                    $this->email->set_newline("\r\n");
                                    $this->email->from('no-reply@teatrodiplomata.com.br', 'Reserva Diplomata');
                                    $this->email->to('teatrodiplomata@gmail.com'); # teatrodiplomata@unirb.edu.br
                                    $this->email->subject('Novo Agendamento - Teatro Diplomata.');
                                    $this->email->message("O cliente <b>".$this->session->userdata('nome')."</b> agendou o evento <b>".$reserva['descricao_reserva']."</b>
                                    para o dia <b>".date('d/m/Y', strtotime($reserva['dtinicial']))."</b>.
                                    <br /><br /> Favor não responder este email.
                                    <br /><br />
                                    <p style='font-size: 12px; color: #333; font-family: Georgia, Verdana, Arial;'>---<br />Atenciosamente,</p>
                                    <p style='font-size: 12px; color: #333; font-family: Georgia, Verdana, Arial; font-weight: bold;'>TEATRO DIPLOMATA - UNIRB</p>
                                    <p style='font-size: 12px; color: #333; font-family: Georgia, Verdana, Arial;'><img src='http://teatrodiplomata.com.br/wp-content/themes/teatro/images/assets/contact_icons/home_silver.png' style='float: left;' />Avenida Tamburugy, 474 - Patamares, Salvador - BA, 41680-440</p>
                                    <p style='font-size: 12px; color: #333; font-family: Georgia, Verdana, Arial;'><img src='http://teatrodiplomata.com.br/wp-content/themes/teatro/images/assets/contact_icons/phone_silver.png' style='float: left;' />(71) 3368-8342</p>
                                    <p style='font-size: 12px; color: #333; font-family: Georgia, Verdana, Arial;''><img src='http://teatrodiplomata.com.br/wp-content/themes/teatro/images/assets/contact_icons/mail_silver.png' style='float: left;' />reserva@teatrodiplomata.com.br</p>
                                    ");
                                    $this->email->send();
                                }
                            }else{
                                exit("Já existe um agendamento em seu nome para esta data.");
                            }
                        }else{
                            echo "O período desejado está comprometido.";
                        }
                        if($this->session->userdata('perfil') != 'administrador'){  
                            $valorInicial = "4500";
                              /*  $anoCorrente = date("Y", strtotime($dtinicial));                   
                                switch($anoCorrente){
                                    case '2014' :
                                        $valorInicial = "4500";
                                        break;
                                    case '2015' :
                                        $valorinIcial = "4800";
                                        break;
                                    case '2016' :
                                        exit("Ainda não existe contrato para o ano desejado.");
                                        break;
                                }       */                     
                                //$difDias = strtotime("$dtfinal") - strtotime("$dtinicial");                       
                                //$dias = floor($difDias / (60 * 60 * 24));  
                                //$valorContrato = $valorInicial * ++$dias;
                                $valorContrato = $valorInicial;
                                $boleto = array(
                                    'reserva_usuario_idusuario'=>$this->session->userdata('idusuario'),
                                    'reserva_idreserva'=>$idReserva,
                                    'tparcelas'=>2,//$this->input->post('pagamento'),
                                    'ativo_bol'=>1,                                
                                    'baixa'=>0
                                );     
                                //switch($this->input->post('pagamento')){
                                   // case 1 :
                                $data_inicial = date('Y-m-d');
                                $data_final   = date('Y-m-d', strtotime($dtinicial));
                                // Calcula a diferença em segundos entre as datas
                                $diferenca = strtotime($data_final) - strtotime($data_inicial); 
                                //Calcula a diferença em dias
                                $dias = floor($diferenca / (60 * 60 * 24));
                                if($dias <= 31){
                                    $fila    = $this->Pagamento_Model->filaReserva($idReserva);                                   
                                    $emitido = 0;
                                    $Vencimento = '000-00-00';
                                    if(empty($fila)){
                                        $anoAtual = date('Y', time());
                                        $aPosterior =  $anoAtual + 1;
                                        $anoNovo = $aPosterior."-01-01";  
                                        $emitido = 1;
                                        $dt = date('Y-m-d',strtotime("+1 days"));                                        
                                        if($dt == $anoNovo){
                                            $dt = date('Y-m-d', strtotime($dt."+1 days"));
                                        }
                                        $Vencimento = $this->fimDeSemana($dt);
                                        //$Vencimento = date('Y-m-d',strtotime("+1 days"));
                                    }
                                    $bolConfig = array(
                                        //'valor'=>$valorContrato * "1",
                                        'valor'=>$valorContrato,
                                        'dtvencimento'=>$Vencimento,
                                        'nparcela'=>1,
                                        'tparcelas'=>1,
                                        'emitido'=>$emitido
                                    );
                                    $insert = array_merge($boleto,$bolConfig);
                                    $id = $this->Pagamento_Model->inserir($insert);
                                    if(empty($fila)){
                                            $this->geraBoleto($id);
                                        }else{
                                            exit("Existe um agendamento para este dia. Porém, se não for confirmada a reserva te enviaremos um email com boleto para pagamento em até 48hs.");
                                        }
                                }else{
                                    $fila       = $this->Pagamento_Model->filaReserva($idReserva);
                                    $emitido = 0;
                                    $Vencimento = '000-00-00';
                                    $dt = date('Y-m-d',strtotime("+1 days"));
                                    if(empty($fila)){
                                        $anoAtual = date('Y', time());
                                        $aPosterior =  $anoAtual + 1;
                                        $anoNovo = $aPosterior."-01-01"; 
                                        $emitido = 1;
                                        $dt = date('Y-m-d',strtotime("+1 days"));
                                        if($dt == $anoNovo){
                                            $dt = date('Y-m-d', strtotime($dt."+1 days"));
                                        }
                                        $Vencimento = $this->fimDeSemana($dt);
                                    }
                                    $bolConfig = array(
                                        //'valor'=>$valorContrato * "1",
                                        'valor'=>$valorContrato * 50.0/100.0,
                                        'dtvencimento'=>$Vencimento,
                                        'nparcela'=>1,
                                        'emitido'=>$emitido
                                    );
                                    $insert = array_merge($boleto,$bolConfig);
                                    $id = $this->Pagamento_Model->inserir($insert);                                    
                                    $prazo2parc = date('Y-m-d', strtotime("$dtinicial -30 days"));
                                    $anoAtual = date('Y', time());
                                    $aPosterior =  $anoAtual + 1;
                                    $anoNovo = $aPosterior."-01-01";
                                    if($prazo2parc == $anoNovo){
                                        $prazo2parc = date('Y-m-d', strtotime($prazo2parc."+1 days"));
                                    }
                                    $dt2parc = $this->fimDeSemana($prazo2parc);
                                        $bolConfig = array(
                                            'valor'=>$valorContrato * 50.0/100.0,
                                            //'dtvencimento'=>$dtinicial."-30 days",
                                            'dtvencimento'=>$dt2parc,
                                            'nparcela'=>2,
                                            'emitido'=>0
                                        );
                                        $insert2 = array_merge($boleto,$bolConfig);
                                        $this->Pagamento_Model->inserir($insert2);
                                    if(empty($fila)){
                                        $this->geraBoleto($id);
                                    }else{
                                        exit("Existe um agendamento para este dia. Porém, se não for confirmada a reserva te enviaremos um email com boleto para pagamento em até 48hs.");
                                    }                                       
                                   // break;
                                    /* case 2 :
                                    $bolConfig = array(
                                        'valor'=>$valorContrato * 20.0/100.0,
                                        'dtvencimento'=>date('Y-m-d',strtotime("+2 days")),
                                        'nparcela'=>1
                                    );
                                    $insert1 = array_merge($boleto,$bolConfig);
                                    $this->Pagamento_Model->inserir($insert1);
                                    $bolConfig = array(
                                        'valor'=>$valorContrato * 80.0/100.0,
                                        'dtvencimento'=>$dtinicial."-30 days",
                                        'nparcela'=>2
                                    );
                                    $insert2 = array_merge($boleto,$bolConfig);
                                    $this->Pagamento_Model->inserir($insert2);
                                    break;
                                case 3 : 
                                    $bolConfig = array(
                                        'valor'=>$valorContrato * 20.0/100.0,
                                        'dtvencimento'=>$dtinicial."+2 days",
                                        'nparcela'=>1
                                    );
                                    $insert1 = array_merge($boleto,$bolConfig);
                                    $this->Pagamento_Model->inserir($insert1);
                                    $bolConfig = array(
                                        'valor'=>$valorContrato * 30.0/100.0,
                                        'dtvencimento'=>$dtinicial."-30 days",
                                        'nparcela'=>2
                                    );
                                    $insert2 = array_merge($boleto,$bolConfig);
                                    $this->Pagamento_Model->inserir($insert2);
                                    $bolConfig = array(
                                        'valor'=>$valorContrato * 50.0/100.0,
                                        'dtvencimento'=>$dtinicial."-10 days",
                                        'nparcela'=>3
                                    );
                                    $insert3 = array_merge($boleto,$bolConfig);
                                    $this->Pagamento_Model->inserir($insert3);                                
                                    break;  
                                }*/
                            }
                        }
                    }
                }else{   
                    exit("A data de entrega não pode ultrapassar três dias da data de reserva.");
                }   
            }
            else{
                exit("Existe uma reserva ou agendamento para a data de entrega desejada.");
            }
        }
        else{
            echo 'Agendamento não realizado. Campos não preenchidos corretamente.';
        }
    }

    function geraBoleto($idBoleto){        
        $dadosBol = $this->Pagamento_Model->encaminhaBoleto($idBoleto); 
        if(!empty($dadosBol)){
            $id_inscricao       = $dadosBol[0]->idboleto;
            $nome               = $dadosBol[0]->nome;
            $cpf                = $dadosBol[0]->nregistro;
            $end                = $dadosBol[0]->endereco;
            $bairro             = $dadosBol[0]->bairro;
            $cidade             = $dadosBol[0]->cidade;
            $estado             = $dadosBol[0]->estado;
            $cep                = $dadosBol[0]->cep;
            $NumBoleto          = $dadosBol[0]->idboleto;
            $data_venc          = date('d/m/Y', strtotime($dadosBol[0]->dtvencimento));
            $nomeEvento         = $dadosBol[0]->descricao_reserva;
            $valor              = $dadosBol[0]->valor;
            $dataAgendamento    = $dadosBol[0]->dtinicial;
        }
        else{
            exit("Efetue o pagamento do boleto e entre em contato através do número 71 3368-8342");            
        }
        $dias_de_prazo_para_pagamento = 1;
        $taxa_boleto = 0;
        $hoje = date("d/m/Y");
        if ($data_venc == NULL){
            $data_venc = date("d/m/Y", time() + ($dias_de_prazo_para_pagamento * 86400));  // Prazo de X dias OU informe data: "13/04/2006"; 
        }
        $valorcobrado = $valor; // Valor - REGRA: Sem pontos na milhar e tanto faz com "." ou "," ou com 1 ou 2 ou sem casa decimal
        $valor_cobrado = str_replace(",", ".",$valorcobrado);
        $valor_boleto = number_format($valor_cobrado+$taxa_boleto, 2, ',', '');

        $dadosboleto["numero_documento"] = $NumBoleto;  // Num do pedido ou nosso numero
        $dadosboleto["data_vencimento"] = $data_venc; // Data de Vencimento do Boleto
        $dadosboleto["data_documento"] = $hoje; // Data de emissão do Boleto
        $dadosboleto["data_processamento"] = $hoje; // Data de processamento do boleto (opcional)
        $dadosboleto["valor_boleto"] = $valor_boleto;   // Valor do Boleto, com vírgula, sempre com duas casas depois da virgula

        /* DADOS DO SEU CLIENTE */
        $dadosboleto["sacado"] = $nome;
        $dadosboleto["endereco1"] = $cpf;
        $dadosboleto["endereco2"] = $end.",".$bairro." ".$cidade."-".$estado."   CEP:".$cep;

        /* INSTRUÇÕES PARA O CLIENTE */
        $dadosboleto["instrucoes"] = "";
        $dadosboleto["instrucoes1"] = "**** NÃO RECEBER APÓS O VENCIMENTO ****";
        $dadosboleto["instrucoes2"] = "Referência do Evento: ".$nomeEvento; 
        $dadosboleto["instrucoes3"] = "Data da Reserva: ".date('d/m/Y', strtotime($dataAgendamento));
        $dadosboleto["instrucoes4"] = "Numero de inscrição: ".$id_inscricao;
        $dadosboleto["instrucoes5"] = "OBS: Em caso de desistência o valor pago não será restituído.";

        /* SEUS DADOS */
        $dadosboleto["cpf_cnpj"] = "11.274.854/0001-82";
        $dadosboleto["endereco"] = "Av. Tamburugy 474, Patamares";
        $dadosboleto["cidade"] = "Salvador - BA";
        $dadosboleto["cedente"] = "ANA'S EMPREENDIMENTOS LTDA";

        //dados da sua conta e convênio
        $dadosboleto["agencia"] = "3459"; // Num da agencia, sem digito
        $dadosboleto["conta"] = "16846";    // Num da conta, sem digito
        //convenio e contrato podem ser vistos no gerenciador financeiro do BB
        $dadosboleto["convenio"] = "2626994";  // Num do convênio
        $dadosboleto["contrato"] = "19146850"; // Num do seu contrato
        $dadosboleto["carteira"] = "17";  // Código da Carteira 18 - 17 ou 11
        $dadosboleto["variacao_carteira"] = "";  // Variação da Carteira, com traço (opcional)

        $TotalCarac = strlen($NumBoleto); //trantando o Nosso Numero para o formato do BB
        switch($TotalCarac){
            case 1: $NumBoletobb = "000000".$NumBoleto; break;
            case 2: $NumBoletobb = "00000".$NumBoleto;  break;
            case 3: $NumBoletobb = "0000".$NumBoleto;   break;
            case 4: $NumBoletobb = "000".$NumBoleto;    break;
            case 5: $NumBoletobb = "00".$NumBoleto;     break;
            case 6: $NumBoletobb = "0".$NumBoleto;      break;
        }   

        $dadosboleto["nosso_numero"] = $NumBoletobb;
        // TIPO DO BOLETO
        $dadosboleto["formatacao_convenio"] = "7"; // REGRA: 8 p/ Convênio c/ 8 dígitos, 7 p/ Convênio c/ 7 dígitos, ou 6 se Convênio c/ 6 dígitos
        $dadosboleto["formatacao_nosso_numero"] = "2"; // REGRA: Usado apenas p/ Convênio c/ 6 dígitos: informe 1 se for NossoNúmero de até 5 dígitos ou 2 para opção de até 17 dígitos
        //OPCIONAIS
        $dadosboleto["quantidade"] = $dadosBol[0]->nparcela."/".$dadosBol[0]->tparcelas;
        $dadosboleto["valor_unitario"] = "";
        $dadosboleto["aceite"] = "N";       
        $dadosboleto["uso_banco"] = "";     
        $dadosboleto["especie"] = "R$";
        $dadosboleto["especie_doc"] = "DM";

        // SÓ MEXA DEPOIS DISSO SE VOCÊ FOR EXPERIENTE EM PHP
        include("inc/boleto/inc/funcoesbb.php"); 
        include("inc/boleto/inc/layoutbbhtml.php");
        // INSERE NÚMERO DO BOLETO GERADO NO BANCO (UPDATE)
        $bolNnumero = substr($dadosboleto["nosso_numero"], 0, 17);
        $this->Pagamento_Model->geraNumeroBoleto($id_inscricao, $bolNnumero);     
    }

    function fimDeSemana($dtVencimento){        
        # separa dia, mês e ano.
        $data = explode("-", $dtVencimento);
        $ano = $data[0];
        $mes = $data[1];
        $dia = $data[2];
        if(date('w',mktime(0,0,0,$mes,$dia,$ano)) === 0){
            $dtVencimento = date('Y-m-d',strtotime($dtVencimento . "+1 days")); # +1 dia.    
            $feriado = $this->Pagamento_Model->feriados($dtVencimento);
            if(!empty($feriado)){
                for($i=0; $i<count($feriado); $i++){
                    if($feriado[$i]->dtferiado === $dtVencimento){
                        $dtVencimento = date('Y-m-d',strtotime($feriado[$i]->dtferiado . "+1 days"));
                    }
                }    
            }
        }elseif(date('w',mktime(0,0,0,$mes,$dia,$ano)) === 6){
            $dtVencimento = date('Y-m-d',strtotime($dtVencimento . "+2 days")); # +2 dias.
            $feriado = $this->Pagamento_Model->feriados($dtVencimento);
            if(!empty($feriado)){
                for($i=0; $i<count($feriado); $i++){
                    if($feriado[$i]->dtferiado === $dtVencimento){ 
                        $dtVencimento = date('Y-m-d',strtotime($feriado[$i]->dtferiado . "+1 days"));
                    }
                }    
            }
        }else{          
            $feriado = $this->Pagamento_Model->feriados($dtVencimento);  
            if(!empty($feriado)){
                for($i=0; $i<count($feriado); $i++){
                    if($feriado[$i]->dtferiado === $dtVencimento){
                        $dtVencimento = date('Y-m-d',strtotime($feriado[$i]->dtferiado . "+1 days"));
                    }
                }  
            }         
            return $dtVencimento;
        }
    }

    public function gerencia(){
        $rows = $this->Reserva_Model->gerenciaReservas();      
        $reservas = array('reservas'=>$rows);
        $this->load->view('reserva_view',$reservas);
    }

    public function gerenciaAdmin(){
        $rows = $this->Reserva_Model->gerenciaReservasAdmin();      
        $reservas = array('reservas'=>$rows);
        $this->load->view('layout/header_view');
        $this->load->view('menu_view');
        $this->load->view('reserva_admin',$reservas);
        $this->load->view('layout/footer_view');        
    }

    public function aprova($reserva){
        $this->Reserva_Model->aprovaReserva($reserva);
        header("location:".base_url()."reserva/");
    }

    public function libera($reserva){
        $this->Reserva_Model->liberaReserva($reserva);
        header("location:".base_url()."reserva/");
    }

     public function aprovaAdmin($reserva){
        $this->Reserva_Model->aprovaReserva($reserva);
        header("location:".base_url()."reserva/gerenciaAdmin");
    }

    public function liberaAdmin($reserva){
        $this->Reserva_Model->liberaReserva($reserva);
        header("location:".base_url()."reserva/gerenciaAdmin");
    }

    public function excluiAdmin($reserva){
        $this->Reserva_Model->exclui($reserva);
        header("location:".base_url()."reserva/gerenciaAdmin");
    }

    public function insere($reserva){
        $this->Reserva_Model->insere($reserva);
    }

    public function edita(){
        echo "TESTE";die;
    }

    public function exclui($reserva){
        $this->Reserva_Model->exclui($reserva);
        header("location:".base_url()."reserva/");
    }
}
/* End of file reserva.php */
/* Location: ./application/controllers/reserva.php */